<!DOCTYPE html>
<html lang="zh">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>bind</title>
    <script>
        /* 
            bind(要绑定的this,要绑定的参数)是一个函数的方法，可以用来创建一个新的函数。
                1.bind可以为新函数绑定this，使得返回的新函数的this永远为绑定的this，这时新函数无论以何种形式调用(包括call()方法和apply()方法)，this都为绑定的this.
                2.bind也可以为新函数绑定参数，后续再传参，也修改不了。（只影响新函数）
                3.由于没有自己的this,不能用于构造函数来生成实例对象
        */
        function fn(a,b,c) {
            console.log('fn执行了', this)
            console.log(a,b,c)
        }

        fn.call()    // fn执行了
        fn.apply()   // fn执行了

        const obj = { 'name': '孙悟空' }
        //调用bind()方法并不会使函数执行，而是返回一个新的函数。
        const newFn = fn.bind(obj,20,30,40)   //   将新函数的this绑定为obj，bind可以为绑定参数，后续再传参，也修改不了

        newFn(1,2,3) //调用返回的新函数
        newFn.call(window,4,5,6)  // 这时this还是上面绑定的obj,并不是指定的window
        fn(10,20,30)    // 旧函数无影响


    </script>
</head>

<body>

</body>

</html>